package FrontOffice;

import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.Vector;

import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.Statement;

public class Statements {
	final private static String hostname = "db.uni-duisburg-essen.de";
	final private static String port = "3306";
	final private static String dbname = "sgvoulus_1?useUnicode=true&characterEncoding=UTF-8";
	final private static String user = "sgvoulus";
	final private static String password = "tabShij=";
	static Connection conn;
	static Statement stmt;
	static String aktueler_nutzer = "";
	static int Anzahl_Vokabeln = 0;
	static String first_language = "";
	static String second_language = "";
	static String kategorie = "";
	static int gewaehlte_Anzahl;
	static int richtig_gewusst = 0;
	static int falsch_gewusst = 0;

	public static void reset() {
		Anzahl_Vokabeln = 0;
		first_language = "";
		second_language = "";
		kategorie = "";
		gewaehlte_Anzahl = 0;
		richtig_gewusst = 0;
		falsch_gewusst = 0;
	}

	// LOGIN von USER mit Benutzername(idUSER) und Passwort
	public static boolean login(String idUSER, String Passwort)
			throws SQLException {
		boolean check = false;

		try {
			String url = "jdbc:mysql://" + hostname + ":" + port + "/" + dbname;
			conn = (Connection) DriverManager
					.getConnection(url, user, password);
			String sqlCommand = "SELECT Benutzername FROM User WHERE Benutzername = '"
					+ idUSER + "' AND Passwort = '" + Passwort + "'";

			Statement stmt = (Statement) conn.createStatement();
			ResultSet rs = stmt.executeQuery(sqlCommand);
			if (rs.last() == true) {
				check = true;
			} else {
				check = false;
			}

			conn = null;
			stmt = null;
		} catch (SQLException sqle) {
			System.out.println("SQLException: " + sqle.getMessage());
			System.out.println("SQLState: " + sqle.getSQLState());
			System.out.println("VendorError: " + sqle.getErrorCode());
			sqle.printStackTrace();
		}
		return check;
	}

	// CONN.CLOSE() nach dem Aufruf der Methode
	// ErsteSprache und ZweiteSprache fuellen
	public static ResultSet Sprachauswahl() {
		ResultSet rs = null;
		try {
			String url = "jdbc:mysql://" + hostname + ":" + port + "/" + dbname;
			conn = (Connection) DriverManager
					.getConnection(url, user, password);
			String sqlCommand = "SELECT Bezeichnung FROM sprache";
			Statement stmt = (Statement) conn.createStatement();
			rs = stmt.executeQuery(sqlCommand);
		} catch (SQLException sqle) {

		}
		return rs;

	}

	// fuegt neuen admin hinzu
	private static void user_hinzufuegen(String benutzername, String name,
			String vorname, String pword) {
		try {
			String url = "jdbc:mysql://" + hostname + ":" + port + "/" + dbname;
			conn = (Connection) DriverManager
					.getConnection(url, user, password);
			String sqlCommand = "INSERT INTO User VALUES('" + benutzername
					+ "','" + name + "','" + vorname + "','" + pword + "',0)";
			Statement stmt = (Statement) conn.createStatement();
			stmt.executeUpdate(sqlCommand);
			conn.close();
			conn = null;
			stmt.close();
			stmt = null;
		} catch (SQLException sqle) {
			System.out.println("SQLException: " + sqle.getMessage());
			System.out.println("SQLState: " + sqle.getSQLState());
			System.out.println("VendorError: " + sqle.getErrorCode());
			sqle.printStackTrace();
		}
	}

	// guckt ob user existier
	private static boolean findeuser(String benutzername) {
		boolean check = false;
		try {
			String url = "jdbc:mysql://" + hostname + ":" + port + "/" + dbname;
			conn = (Connection) DriverManager
					.getConnection(url, user, password);
			String sqlCommand = "SELECT * FROM User WHERE Benutzername = '"
					+ benutzername + "'";
			Statement stmt = (Statement) conn.createStatement();
			ResultSet rs = stmt.executeQuery(sqlCommand);
			if (rs.last() == true) {
				check = true;
			} else
				check = false;
			conn.close();
			conn = null;
			stmt.close();
			stmt = null;
		} catch (SQLException sqle) {
			System.out.println(sqle.getMessage());
			System.out.println("SQLException: " + sqle.getMessage());
			System.out.println("SQLState: " + sqle.getSQLState());
			System.out.println("VendorError: " + sqle.getErrorCode());
			sqle.printStackTrace();
		}
		return check;
	}

	public static boolean new_user_anlegen(String benutzername, String name,
			String vorname, String pword) {
		boolean check = false;
		if (!findeuser(benutzername)) {
			user_hinzufuegen(benutzername, name, vorname, pword);
			check = true;
		}
		return check;
	}

	public static JComboBox combosprachefuellen(JComboBox tmp) {
		ResultSet rs = null;
		try {
			String url = "jdbc:mysql://" + hostname + ":" + port + "/" + dbname;
			conn = (Connection) DriverManager
					.getConnection(url, user, password);
			String sqlCommand = "SELECT Kuerzel FROM Sprache";
			Statement stmt = (Statement) conn.createStatement();
			rs = stmt.executeQuery(sqlCommand);
			if (rs.last() == true) {
				rs.beforeFirst();
				while (rs.next()) {
					if (!rs.getString("Kuerzel").equals("null")) {
						tmp.addItem(rs.getString("Kuerzel"));
					}
				}
			}
			conn.close();
			stmt.close();
			conn = null;
			stmt = null;
		} catch (SQLException sqle) {
			System.out.println("SQLException: " + sqle.getMessage());
			System.out.println("SQLState: " + sqle.getSQLState());
			System.out.println("VendorError: " + sqle.getErrorCode());
			sqle.printStackTrace();
			conn = null;
			stmt = null;
			// connection_start();
			combosprachefuellen(tmp);
		}
		return tmp;
	}

	// fuellt comabobox kategorie mit daten zu einer bestimmten sprache
	public static JComboBox combokategoriefuellen(String kuerzel_Erste,
			String kuerzel_Zweite, JComboBox tmp) {

		try {
			String url = "jdbc:mysql://" + hostname + ":" + port + "/" + dbname;
			conn = (Connection) DriverManager
					.getConnection(url, user, password);
			Statement stmt = (Statement) conn.createStatement();
			String sqlCommand = "SELECT DISTINCT Kategorie_Bezeichnung FROM Uebersetzung join Uebersetzung_has_Englisch on UebersetzungID = Uebersetzung_UebersetzungID join Sprache on Kuerzel = Sprache_Kuerzel join Kategorie on Kategorie_KategorieID = KategorieID join Englisch a on Englisch_EnglischID = a.EnglischID WHERE Sprache.Kuerzel = '"
					+ kuerzel_Erste
					+ "' AND "
					+ "EnglischID IN (SELECT a.EnglischID FROM Uebersetzung join Uebersetzung_has_Englisch on UebersetzungID = Uebersetzung_UebersetzungID join Sprache on Kuerzel = Sprache_Kuerzel join Kategorie on Kategorie_KategorieID = KategorieID join Englisch a on Englisch_EnglischID = a.EnglischID WHERE Sprache.Kuerzel = '"
					+ kuerzel_Zweite + "')";
			ResultSet rs;
			rs = stmt.executeQuery(sqlCommand);
			if (rs.last() == true) {
				rs.beforeFirst();
				while (rs.next()) {
					tmp.addItem(rs.getString("Kategorie_Bezeichnung"));
				}
			}
			conn.close();
			stmt.close();
			conn = null;
			stmt = null;
		} catch (SQLException sqle) {
			System.out.println("SQLException: " + sqle.getMessage());
			System.out.println("SQLState: " + sqle.getSQLState());
			System.out.println("VendorError: " + sqle.getErrorCode());
			sqle.printStackTrace();
			combokategoriefuellen(kuerzel_Erste, kuerzel_Zweite, tmp);
		}
		return tmp;
	}

	public static JComboBox Kategorie_Englisch_Ausgewahlt(String erste,
			String zweite, JComboBox tmp) {
		try {
			String url = "jdbc:mysql://" + hostname + ":" + port + "/" + dbname;
			conn = (Connection) DriverManager
					.getConnection(url, user, password);
			Statement stmt = (Statement) conn.createStatement();

			if (erste.equals("EN")) {
				String sqlCommand = "SELECT DISTINCT b.Kategorie_Bezeichnung FROM Uebersetzung join Uebersetzung_has_Englisch on UebersetzungID = Uebersetzung_UebersetzungID join Sprache on Kuerzel = Sprache_Kuerzel join Kategorie on Kategorie_KategorieID = KategorieID join Englisch a on Englisch_EnglischID = a.EnglischID join Kategorie b on a.Kategorie_KategorieID = b.KategorieID WHERE Sprache.Kuerzel = '"
						+ zweite + "'";
				ResultSet rs;
				rs = stmt.executeQuery(sqlCommand);
				if (rs.last() == true) {
					rs.beforeFirst();
					while (rs.next()) {
						tmp.addItem(rs.getString("b.Kategorie_Bezeichnung"));
					}
				}
			} else {
				String sqlCommand = "SELECT DISTINCT Kategorie.Kategorie_Bezeichnung FROM Uebersetzung join Uebersetzung_has_Englisch on UebersetzungID = Uebersetzung_UebersetzungID join Sprache on Kuerzel = Sprache_Kuerzel join Kategorie on Kategorie_KategorieID = KategorieID join Englisch a on Englisch_EnglischID = a.EnglischID join Kategorie b on a.Kategorie_KategorieID = b.KategorieID WHERE Sprache.Kuerzel = '"
						+ erste + "'";
				ResultSet rs;
				rs = stmt.executeQuery(sqlCommand);
				if (rs.last() == true) {
					rs.beforeFirst();
					while (rs.next()) {
						tmp.addItem(rs
								.getString("Kategorie.Kategorie_Bezeichnung"));
					}
				}
			}
			conn.close();
			stmt.close();
			conn = null;
			stmt = null;
		} catch (SQLException sqle) {
			System.out.println("SQLException: " + sqle.getMessage());
			System.out.println("SQLState: " + sqle.getSQLState());
			System.out.println("VendorError: " + sqle.getErrorCode());
			sqle.printStackTrace();
		}
		return tmp;

	}

	public static void zufallswort(JLabel wort) {
		if (!first_language.equals("EN") && !second_language.equals("EN")) {
			englisch_nicht_ausgewaellt(wort);
		}
		if (first_language.equals("EN")) {
			englisch_first_language(wort);
		}
		if (second_language.equals("EN")) {
			englisch_second_language(wort);
		}
	}

	private static void englisch_second_language(JLabel wort) {
		try {
			String url = "jdbc:mysql://" + hostname + ":" + port + "/" + dbname;
			conn = (Connection) DriverManager
					.getConnection(url, user, password);
			Statement stmt = (Statement) conn.createStatement();
			String sqlCommand = "SELECT a.Wort FROM Uebersetzung join Uebersetzung_has_Englisch on UebersetzungID = Uebersetzung_UebersetzungID join Sprache on Kuerzel = Sprache_Kuerzel join Kategorie on Kategorie_KategorieID = KategorieID join Englisch a on Englisch_EnglischID = a.EnglischID join Kategorie b on a.Kategorie_KategorieID = b.KategorieID WHERE Sprache.Kuerzel = '"
					+ first_language
					+ "' AND Kategorie.Kategorie_Bezeichnung = '"
					+ kategorie
					+ "' ORDER BY RAND() limit 1";
			ResultSet rs;
			rs = stmt.executeQuery(sqlCommand);
			if (rs.last() == true) {
				rs.beforeFirst();
				while (rs.next()) {
					wort.setText("" + (rs.getString("a.Wort")));
				}
			}
			conn.close();
			stmt.close();
			conn = null;
			stmt = null;
		} catch (SQLException sqle) {
			System.out.println("SQLException: " + sqle.getMessage());
			System.out.println("SQLState: " + sqle.getSQLState());
			System.out.println("VendorError: " + sqle.getErrorCode());
			sqle.printStackTrace();
			System.out.println(sqle.getMessage());
		}
	}

	private static void englisch_first_language(JLabel wort) {
		try {
			String url = "jdbc:mysql://" + hostname + ":" + port + "/" + dbname;
			conn = (Connection) DriverManager
					.getConnection(url, user, password);
			Statement stmt = (Statement) conn.createStatement();

			String sqlCommand = "SELECT Uebersetzung.Wort FROM Uebersetzung join Uebersetzung_has_Englisch on UebersetzungID = Uebersetzung_UebersetzungID join Sprache on Kuerzel = Sprache_Kuerzel join Kategorie on Kategorie_KategorieID = KategorieID join Englisch a on Englisch_EnglischID = a.EnglischID join Kategorie b on a.Kategorie_KategorieID = b.KategorieID WHERE Sprache.Kuerzel = '"
					+ second_language
					+ "' AND b.Kategorie_Bezeichnung = '"
					+ kategorie + "'ORDER BY RAND() limit 1";
			ResultSet rs;
			rs = stmt.executeQuery(sqlCommand);
			if (rs.last() == true) {
				rs.beforeFirst();
				while (rs.next()) {
					wort.setText("" + (rs.getString("Uebersetzung.Wort")));
				}
			}
			conn.close();
			stmt.close();
			conn = null;
			stmt = null;
		} catch (SQLException sqle) {
			System.out.println("SQLException: " + sqle.getMessage());
			System.out.println("SQLState: " + sqle.getSQLState());
			System.out.println("VendorError: " + sqle.getErrorCode());
			sqle.printStackTrace();
		}
	}

	private static void englisch_nicht_ausgewaellt(JLabel wort) {
		try {
			String url = "jdbc:mysql://" + hostname + ":" + port + "/" + dbname;
			conn = (Connection) DriverManager
					.getConnection(url, user, password);
			Statement stmt = (Statement) conn.createStatement();

			String sqlCommand = "SELECT Uebersetzung.Wort FROM Uebersetzung join Uebersetzung_has_Englisch on UebersetzungID = Uebersetzung_UebersetzungID join Sprache on Kuerzel = Sprache_Kuerzel join Kategorie on Kategorie_KategorieID = KategorieID join Englisch a on Englisch_EnglischID = a.EnglischID WHERE Sprache.Kuerzel = '"
					+ second_language
					+ "' AND EnglischID IN (SELECT a.EnglischID FROM Uebersetzung join Uebersetzung_has_Englisch on UebersetzungID = Uebersetzung_UebersetzungID join Sprache on Kuerzel = Sprache_Kuerzel join Kategorie on Kategorie_KategorieID = KategorieID join Englisch a on Englisch_EnglischID = a.EnglischID WHERE Sprache.Kuerzel ='"
					+ first_language
					+ "' AND Kategorie_Bezeichnung = '"
					+ kategorie + "') ORDER BY RAND() limit 1";
			ResultSet rs;
			rs = stmt.executeQuery(sqlCommand);
			if (rs.last() == true) {
				rs.beforeFirst();
				while (rs.next()) {
					wort.setText("" + (rs.getString("Uebersetzung.Wort")));
				}
			}

			conn.close();
			stmt.close();
			conn = null;
			stmt = null;
		} catch (SQLException sqle) {
			System.out.println("SQLException: " + sqle.getMessage());
			System.out.println("SQLState: " + sqle.getSQLState());
			System.out.println("VendorError: " + sqle.getErrorCode());
			sqle.printStackTrace();
		}
	}

	public static boolean richtigkeit_pruefen(String wort,
			String eingegebenes_wort) {
		boolean check = false;
		ResultSet rs = null;
		try {
			if (!first_language.equals("EN") && !second_language.equals("EN")) {
				String url = "jdbc:mysql://" + hostname + ":" + port + "/"
						+ dbname;
				conn = (Connection) DriverManager.getConnection(url, user,
						password);
				Statement stmt = (Statement) conn.createStatement();

				String sqlCommand = "SELECT Uebersetzung.Wort FROM Uebersetzung JOIN Uebersetzung_has_Englisch ON UebersetzungID = Uebersetzung_UebersetzungID JOIN Sprache ON Kuerzel = Sprache_Kuerzel JOIN Kategorie ON Kategorie_KategorieID = KategorieID JOIN Englisch a ON Englisch_EnglischID = a.EnglischID WHERE Sprache.Kuerzel = '"
						+ first_language
						+ "' AND Kategorie_Bezeichnung = '"
						+ kategorie
						+ "' AND EnglischID IN (SELECT a.EnglischID FROM Uebersetzung JOIN Uebersetzung_has_Englisch ON UebersetzungID = Uebersetzung_UebersetzungID JOIN Sprache ON Kuerzel = Sprache_Kuerzel JOIN Kategorie ON Kategorie_KategorieID = KategorieID JOIN Englisch a ON Englisch_EnglischID = a.EnglischID WHERE Sprache.Kuerzel = '"
						+ second_language
						+ "' AND Uebersetzung.Wort = '"
						+ wort + "')";
				rs = stmt.executeQuery(sqlCommand);
				while (rs.next()) {
					if (rs.getString("Uebersetzung.Wort").equals(
							eingegebenes_wort)) {
						check = true;
						break;
					}
				}
			}
			if (first_language.equals("EN")) {
				String url = "jdbc:mysql://" + hostname + ":" + port + "/"
						+ dbname;
				conn = (Connection) DriverManager.getConnection(url, user,
						password);
				Statement stmt = (Statement) conn.createStatement();

				String sqlCommand = "SELECT a.Wort FROM Uebersetzung join Uebersetzung_has_Englisch on UebersetzungID = Uebersetzung_UebersetzungID join Sprache on Kuerzel = Sprache_Kuerzel join Kategorie on Kategorie_KategorieID = KategorieID join Englisch a on Englisch_EnglischID = a.EnglischID join Kategorie b on a.Kategorie_KategorieID = b.KategorieID WHERE Sprache.Kuerzel = '"
						+ second_language
						+ "' AND b.Kategorie_Bezeichnung = '"
						+ kategorie
						+ "' AND Uebersetzung.Wort = '"
						+ wort
						+ "'";
				rs = stmt.executeQuery(sqlCommand);
				while (rs.next()) {
					if (rs.getString("a.Wort").equals(eingegebenes_wort)) {
						check = true;
						break;
					}
				}
			}
			if (second_language.equals("EN")) {
				String url = "jdbc:mysql://" + hostname + ":" + port + "/"
						+ dbname;
				conn = (Connection) DriverManager.getConnection(url, user,
						password);
				Statement stmt = (Statement) conn.createStatement();

				String sqlCommand = "SELECT Uebersetzung.Wort FROM Uebersetzung join Uebersetzung_has_Englisch on UebersetzungID = Uebersetzung_UebersetzungID join Sprache on Kuerzel = Sprache_Kuerzel join Kategorie on Kategorie_KategorieID = KategorieID join Englisch a on Englisch_EnglischID = a.EnglischID join Kategorie b on a.Kategorie_KategorieID = b.KategorieID WHERE Sprache.Kuerzel = '"
						+ first_language
						+ "' AND Kategorie.Kategorie_Bezeichnung ='"
						+ kategorie + "' AND a.Wort = '" + wort + "'";
				rs = stmt.executeQuery(sqlCommand);
				while (rs.next()) {
					if (rs.getString("Uebersetzung.Wort").equals(
							eingegebenes_wort)) {
						check = true;
						break;
					}
				}
			}

			conn = null;
			stmt = null;
		} catch (SQLException sqle) {
			System.out.println("SQLException: " + sqle.getMessage());
			System.out.println("SQLState: " + sqle.getSQLState());
			System.out.println("VendorError: " + sqle.getErrorCode());
			sqle.printStackTrace();
		}
		return check;
	}

	public static void Statistik_erstellen(int gewaehlte_Anzahl,
			int falsch_gewusst) {
		ResultSet rs;
		try {
			String url = "jdbc:mysql://" + hostname + ":" + port + "/" + dbname;
			conn = (Connection) DriverManager
					.getConnection(url, user, password);
			Statement stmt = (Statement) conn.createStatement();
			String sqlCommand = "SELECT * FROM Statistik WHERE User_Benutzername = '"
					+ aktueler_nutzer
					+ "' AND Datum = CURRENT_DATE AND Sprache_has_Kategorie_Sprache_Kürzel ='"
					+ first_language
					+ "' AND Sprache_has_Kategorie_Kategorie_KategorieID = "
					+ finde_kategorie_id();
			rs = stmt.executeQuery(sqlCommand);
			if (rs.last() == false) {
				String insert = "INSERT INTO Statistik VALUES (0, CURRENT_DATE, "
						+ gewaehlte_Anzahl
						+ ","
						+ falsch_gewusst
						+ ",'"
						+ aktueler_nutzer
						+ "','"
						+ first_language
						+ "',"
						+ finde_kategorie_id() + ")";
				stmt.executeUpdate(insert);
			} else {
				String update = "UPDATE Statistik SET Gemachte_Vokabeln = Gemachte_Vokabeln +"
						+ gewaehlte_Anzahl
						+ " , Falsche_Vokabeln = Falsche_Vokabeln +"
						+ falsch_gewusst
						+ " WHERE User_Benutzername = '"
						+ aktueler_nutzer
						+ "' AND Datum = CURRENT_DATE AND Sprache_has_Kategorie_Sprache_Kürzel ='"
						+ first_language
						+ "' AND Sprache_has_Kategorie_Kategorie_KategorieID = "
						+ finde_kategorie_id();
				stmt.executeUpdate(update);
			}

			conn = null;
			stmt = null;

		} catch (SQLException sqle) {
			System.out.println("SQLException: " + sqle.getMessage());
			System.out.println("SQLState: " + sqle.getSQLState());
			System.out.println("VendorError: " + sqle.getErrorCode());
			sqle.printStackTrace();
		}

	}

	private static int finde_kategorie_id() {
		ResultSet rs;
		int ID = 0;
		try {
			String url = "jdbc:mysql://" + hostname + ":" + port + "/" + dbname;
			conn = (Connection) DriverManager
					.getConnection(url, user, password);
			Statement stmt = (Statement) conn.createStatement();
			String sqlCommand = "SELECT Kategorie_KategorieID FROM Sprache_has_Kategorie join Kategorie on Kategorie_KategorieID = KategorieID WHERE Sprache_Kuerzel='"
					+ first_language
					+ "' AND Kategorie_Bezeichnung = '"
					+ kategorie + "'";
			rs = stmt.executeQuery(sqlCommand);
			while (rs.next()) {
				ID = rs.getInt("Kategorie_KategorieID");
			}
			conn.close();
			stmt.close();
			conn = null;
			stmt = null;
		} catch (SQLException sqle) {
			System.out.println("SQLException: " + sqle.getMessage());
			System.out.println("SQLState: " + sqle.getSQLState());
			System.out.println("VendorError: " + sqle.getErrorCode());
			sqle.printStackTrace();
		}
		return ID;
	}

	@SuppressWarnings({ "unchecked", "rawtypes" })
	public static DefaultTableModel beste_Sprache(DefaultTableModel tabelle,
			boolean istPrivat) {
		ResultSet rs;
		try {
			String url = "jdbc:mysql://" + hostname + ":" + port + "/" + dbname;
			conn = (Connection) DriverManager
					.getConnection(url, user, password);
			Statement stmt = (Statement) conn.createStatement();
			String sqlCommand = "";
			if (istPrivat == true) {
				sqlCommand = "SELECT Bezeichnung AS gelernte_Sprache, SUM(Gemachte_Vokabeln) as Gemachte_Vokabeln ,SUM(Gemachte_Vokabeln)-SUM(Falsche_Vokabeln) AS Davon_Richtig  FROM User join  Statistik on Benutzername = User_Benutzername INNER JOIN Sprache ON Sprache_has_Kategorie_Sprache_Kürzel = Kuerzel WHERE Benutzername ='"
						+ aktueler_nutzer
						+ "' GROUP BY Benutzername, Sprache_has_Kategorie_Sprache_Kürzel ORDER BY SUM(Gemachte_Vokabeln)-SUM(Falsche_Vokabeln) DESC";
			} else {
				sqlCommand = "SELECT Benutzername, Bezeichnung AS gelernte_Sprache, SUM(Gemachte_Vokabeln) as Gemachte_Vokabeln, SUM(Gemachte_Vokabeln)-SUM(Falsche_Vokabeln) AS Davon_Richtig FROM User join  Statistik on Benutzername = User_Benutzername INNER JOIN Sprache ON Sprache_has_Kategorie_Sprache_Kürzel = Kuerzel GROUP BY Benutzername, Sprache_has_Kategorie_Sprache_Kürzel ORDER BY SUM(Gemachte_Vokabeln)-SUM(Falsche_Vokabeln) DESC";

			}
			rs = stmt.executeQuery(sqlCommand);
			ResultSetMetaData md = rs.getMetaData();
			int columns = md.getColumnCount();
			Vector columnNames = new Vector();
			Vector row = new Vector(columns);
			for (int i = 1; i <= columns; i++) {
				columnNames.addElement(md.getColumnName(i));
				row.addElement(md.getColumnName(i));

			}
			Vector data = new Vector();
			data.addElement(row);
			while (rs.next()) {
				row = new Vector(columns);
				for (int i = 1; i <= columns; i++) {
					row.addElement(rs.getObject(i));
				}
				data.addElement(row);
			}
			tabelle.setDataVector(data, columnNames);
			conn.close();
			stmt.close();
			conn = null;
			stmt = null;
		} catch (SQLException sqle) {
			System.out.println("SQLException: " + sqle.getMessage());
			System.out.println("SQLState: " + sqle.getSQLState());
			System.out.println("VendorError: " + sqle.getErrorCode());
			sqle.printStackTrace();
		}
		return tabelle;
	}

	@SuppressWarnings({ "rawtypes", "unchecked" })
	public static TableModel beliebte_Sprache(DefaultTableModel tabelle,
			boolean istPrivat) {
		ResultSet rs;
		try {
			String url = "jdbc:mysql://" + hostname + ":" + port + "/" + dbname;
			conn = (Connection) DriverManager
					.getConnection(url, user, password);
			Statement stmt = (Statement) conn.createStatement();
			String sqlCommand = "";
			if (istPrivat == true) {
				sqlCommand = "SELECT  Bezeichnung, SUM(Gemachte_Vokabeln) AS Anzahl FROM User JOIN Statistik  on Benutzername = User_Benutzername INNER JOIN Sprache ON Sprache_has_Kategorie_Sprache_Kürzel = Kuerzel WHERE Benutzername = '"
						+ aktueler_nutzer
						+ "' GROUP BY Benutzername, Bezeichnung ORDER BY SUM(Gemachte_Vokabeln) DESC";

			} else {
				sqlCommand = "SELECT Benutzername, Bezeichnung, SUM(Gemachte_Vokabeln) AS Anzahl FROM User JOIN Statistik  on Benutzername = User_Benutzername INNER JOIN Sprache ON Sprache_has_Kategorie_Sprache_Kürzel = Kuerzel GROUP BY Benutzername, Bezeichnung ORDER BY SUM(Gemachte_Vokabeln) DESC";

			}
			rs = stmt.executeQuery(sqlCommand);
			ResultSetMetaData md = rs.getMetaData();
			int columns = md.getColumnCount();
			Vector columnNames = new Vector();
			Vector row = new Vector(columns);
			for (int i = 1; i <= columns; i++) {
				columnNames.addElement(md.getColumnName(i));
				row.addElement(md.getColumnName(i));
			}
			Vector data = new Vector();
			data.addElement(row);
			while (rs.next()) {
				row = new Vector(columns);
				for (int i = 1; i <= columns; i++) {
					row.addElement(rs.getObject(i));
				}
				data.addElement(row);
			}
			tabelle.setDataVector(data, columnNames);
			conn.close();
			stmt.close();
			conn = null;
			stmt = null;
		} catch (SQLException sqle) {
			System.out.println("SQLException: " + sqle.getMessage());
			System.out.println("SQLState: " + sqle.getSQLState());
			System.out.println("VendorError: " + sqle.getErrorCode());
			sqle.printStackTrace();

		}
		return tabelle;
	}

	@SuppressWarnings({ "rawtypes", "unchecked" })
	public static TableModel schlechteste_Sprache(DefaultTableModel tabelle,
			boolean istPrivat) {
		ResultSet rs;
		try {
			String url = "jdbc:mysql://" + hostname + ":" + port + "/" + dbname;
			conn = (Connection) DriverManager
					.getConnection(url, user, password);
			Statement stmt = (Statement) conn.createStatement();
			String sqlCommand = "";
			if (istPrivat == true) {
				sqlCommand = "SELECT Bezeichnung, SUM(Gemachte_Vokabeln) AS Anzahl, SUM(Falsche_Vokabeln) AS Davon_Falsch FROM User JOIN Statistik  on Benutzername = User_Benutzername INNER JOIN Sprache ON Sprache_has_Kategorie_Sprache_Kürzel = Kuerzel WHERE Benutzername = '"
						+ aktueler_nutzer
						+ "' GROUP BY Benutzername, Bezeichnung ORDER BY SUM(Falsche_Vokabeln) DESC";

			} else {
				sqlCommand = "SELECT Benutzername, Bezeichnung, SUM(Gemachte_Vokabeln) AS Anzahl, SUM(Falsche_Vokabeln) AS Davon_Falsch FROM User JOIN Statistik  on Benutzername = User_Benutzername INNER JOIN Sprache ON Sprache_has_Kategorie_Sprache_Kürzel = Kuerzel GROUP BY Benutzername, Bezeichnung ORDER BY SUM(Falsche_Vokabeln) DESC";

			}
			rs = stmt.executeQuery(sqlCommand);
			ResultSetMetaData md = rs.getMetaData();
			int columns = md.getColumnCount();
			Vector columnNames = new Vector();
			Vector row = new Vector(columns);
			for (int i = 1; i <= columns; i++) {
				columnNames.addElement(md.getColumnName(i));
				row.addElement(md.getColumnName(i));

			}
			Vector data = new Vector();
			data.addElement(row);
			while (rs.next()) {
				row = new Vector(columns);
				for (int i = 1; i <= columns; i++) {
					row.addElement(rs.getObject(i));
				}
				data.addElement(row);
			}
			tabelle.setDataVector(data, columnNames);
			conn.close();
			stmt.close();
			conn = null;
			stmt = null;
		} catch (SQLException sqle) {
			System.out.println("SQLException: " + sqle.getMessage());
			System.out.println("SQLState: " + sqle.getSQLState());
			System.out.println("VendorError: " + sqle.getErrorCode());
			sqle.printStackTrace();
		}
		return tabelle;
	}

}
